home *** CD-ROM | disk | FTP | other *** search
- (*===========================================================================*)
- (* Miscellaneous things *)
- (* *)
- (* Copyright 1989, 1990, 1991 by H. Roy Engehausen. All rights reserved. *)
- (* *)
- (*===========================================================================*)
-
- {$UNDEF DEBUG_SPEED_WAIT}
-
- (*===========================================================================*)
- (* Set port speed *)
- (*===========================================================================*)
-
- PROCEDURE set_port_speed(speed : WORD);
-
- CONST
- port_xmit_not_busy = lsr_8250_tsre OR lsr_8250_thre;
-
- VAR
- r : REGISTERS;
-
- BEGIN;
-
- IF (active_port^.port_type = port_pcpa)
- OR (active_port^.port_type = port_bpqhost)
- OR ((active_port^.port_type = port_modem)
- AND (active_port ^.modem_freez)) THEN
- EXIT;
-
- {$IFDEF DEBUG_SPEED_WAIT}
- WRITELN('Speed wait start');
- {$ENDIF}
-
- {$IFDEF NOTHERE}
- REPEAT
-
- task_switch;
-
- {$IFDEF DEBUG_SPEED_WAIT}
- WRITELN('Speed wait ready');
- {$ENDIF}
-
- r.DX := active_port^.com_number - 1;
- r.AH := 3;
-
- INTR(tnc_interrupt, r);
-
- {$IFDEF DEBUG_SPEED_WAIT}
- WRITELN('AH = ', r.AH, ' -- AX = ', r.AX);
- {$ENDIF}
-
- UNTIL (r.AH AND port_xmit_not_busy) = port_xmit_not_busy;
-
- {$IFDEF DEBUG_SPEED_WAIT}
- WRITELN('Speed wait start');
- {$ENDIF}
- {$ENDIF}
-
- r.DX := active_port^.com_number - 1;
- r.AH := 0;
-
- CASE speed OF
- 110 : r.AL := 3;
- 150 : r.AL := $23;
- 300 : r.AL := $43;
- 600 : r.AL := $63;
- 1200 : r.AL := $83;
- 2400 : r.AL := $A3;
- 4800 : r.AL := $C3;
- 9600 : r.AL := $E3;
- ELSE
- BEGIN;
- window_write_critical_i(active_tcb^.port_chan_s +
- + ':Bad speed setting -- ', speed);
- EXIT;
- END;
- END;
-
- INTR(tnc_interrupt, r);
-
- active_port^.cur_rate := speed;
-
- END;
-
- (*===========================================================================*)
- (* Function to return true if modem is connected *)
- (*===========================================================================*)
-
- FUNCTION test_phone_connect : BOOLEAN;
-
- VAR
- regs : REGISTERS;
-
- BEGIN;
-
- (*-----------------------------------------------------------------------*)
- (* Check the DCD bit *)
- (*-----------------------------------------------------------------------*)
-
- regs.AX := $0300;
- regs.DX := active_port^.com_number - 1;
-
- signal_place^ := $0200 + LO(signal_place^);
-
- INTR(tnc_interrupt, regs);
-
- signal_place^ := $F800 + LO(signal_place^);
-
- test_phone_connect := (regs.AL AND msr_8250_rlsd) > 0;
-
- END;